#ifndef TECHNIQUE_SCORE_H
#define TECHNIQUE_SCORE_H

#ifdef __cplusplus
extern "C" {
#endif

#include "calculate_score.h" // 依赖 ScoreFeatureBuffers 定义

/* ---------------- 技巧评分配置 ---------------- */
typedef struct {
    /* 五项基础指标权重，建议总和 = 1.0 */
    float weight_pitch_derivative;   /* 音准导数权重 */
    float weight_energy_derivative;  /* 能量导数权重 */
    float weight_timbre_derivative;  /* 音色导数权重 */
    float weight_energy_range;       /* 最大最小能量差权重 */

    /* 导数相似度压缩参数 γ (>1 时低分段压低) */
    float gamma_derivative;

    /* 颤音加分设置 (总分上限 20) */
    float vibrato_freq_min;          /* 颤音最小频率 (Hz) */
    float vibrato_freq_max;          /* 颤音最大频率 (Hz) */
    float vibrato_bonus_max;         /* 颤音加分上限 (0-20) */

    /* 评分曲线因子, 用于最终 0-1 → 0-100 映射 */
    float curve_factor;
} TechniqueScoreConfig;

/**
 * @brief 计算技巧维度得分 (0-1 范围)
 *
 * @param buffers   评分特征缓冲
 * @param frame_idx_start  句子起始帧索引
 * @param frame_idx_end    句子结束帧索引
 * @param config    技巧评分配置 (若为 NULL 使用默认配置)
 * @return float    技巧维度评分 (0-1)
 */
float calculate_technique_score(const ScoreFeatureBuffers* buffers,
                                int frame_idx_start,
                                int frame_idx_end,
                                const TechniqueScoreConfig* config);

#ifdef __cplusplus
}
#endif

#endif /* TECHNIQUE_SCORE_H */ 